/**
 * @author phi
 */

(function(){ "use strict"; })();

/*
 * Style
 */
TM.loadScript("dom", "dom", function(){
    
    var Element = TM.DOM.Element;
    
    /**
     * スタイルクラス.
     * DOMElement の style を操作するためのクラス.
     * 主に CSSStyleDeclaration の機能をサポートする.
     * @lends   TM.DOM.Style.prototype
     */
    var Style = TM.DOM.Style = TM.createClass({
        
        element: null,
        
        /**
         * @constructs
         * @see <a href="./../../test/dom/style-test.html">Test Program</a>.
         */
        init: function(element) {
            this.element = element;
        },
        
        /**
         * セット
         */
        set: function(name, value) {
            this.element.style[name] = value;
            return this;
        },
        
        /**
         * 削除
         */
        remove: function(name) {
            this.element.style.removeProperty(name);
            // delete this.element.style[name];
            return this;
        },
        
        /**
         * クリア
         */
        clear: function(name) {
            
            return this;
        },
        
        /**
         * 取得
         */
        get: function(name) {
            return this.element.style[name];
        },
        
        /**
         * CSS の値も考慮した上での値を取得
         */
        getPropValue: function(prop_name) {
            return document.defaultView.getComputedStyle(this.element, '').getPropertyValue(prop_name);
        },
    });
    
    /**
     * スタイルクラス
     * @name    style
     * @fieldof TM.DOM.Element.prototype
     * @type    TM.DOM.Style
     */
    Element.prototype.getter("style", function(){
        return this._style || ( this._style = Style(this.element) );
    });
    
    
    console.assert(!TM.$DOMStyle, "名前が競合しています!!", "$DOMStyle");
    /**
     * TM.DOM.Style の alias.
     * short hand としてお使いください.
     */
    TM.$DOMStyle = TM.DOM.Style;
    
});


